<?php
/*
 * Created on 10/12/2008
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
 class Fechas{
 	
 	function Fechas(){	
 	}
 	
 	function &getFechas(){
 		static $instancia;
		if(!is_object($instancia)) $instancia = new Fechas();
		return $instancia;
 	}
	
	/** Regresa el dia del mes respecto al numero de dias adelante
	 * @param integer $pDia Numero de dias que se quieren adelante
	 */
	function getDia($pDia=0)
 	{
 		return date("d",time()+($pDia*24*60*60));
 	}

 	/** Regresa el mes de frma numerica respecto al numero de dias adelante
	 * @param integer $pDia Numero de dias que se quieren adelante
	 */
 	function getMes($pDia=0)
 	{
 		return date("m",time()+($pDia*24*60*60));
 	}

 	/** Regresa el ano respecto al numero de dias adelante
	 * @param integer $pDia Numero de dias que se quieren adelante
	 */
 	function getAno($pDia=0)
 	{
 		return date("y",time()+($pDia*24*60*60));
 	}

 	/** Regresa el ano, los 4 digitos, respecto al numero de dias adelante
	 * @param integer $pDia Numero de dias que se quieren adelante
	 */
 	function getAno4Digits($pDia=0)
 	{
 		return date("Y",time()+($pDia*24*60*60));
 	}

 	/** Compara fechas, estas pueden ser dos o solamente una comparandola con la fecha actual
 	 *
 	 * @param integer $pDia Dia de la primer fecha
 	 * @param integer $pMes Mes de la primer fecha
 	 * @param integer $pAno Ano de la primer fecha
 	 *
 	 * @param integer $pDia2 Dia de la segunda fecha
 	 * @param integer $pMes2 Mes de la segunda fecha
 	 * @param integer $pAno2 Ano de la segunda fecha
 	 *
 	 * @return boolean $ban	Resultado de la comparacion; true o false
 	 */
 	function compareDate($pDia=0,$pMes=0,$pAno=0,$pDia2=0,$pMes2=0,$pAno2=0)
 	{
 		$ban=false;
 		$dif1=0;
 		if($pAno2==0)
 		{
 			if($pAno>=$this->getAno4Digits(0))
 			{
 				$dif1=$pAno-$this->getAno4Digits(0);
 				if($dif1==0)
 				{
 					if($pMes2==0)
 					{
 						if($pMes>=$this->getMes(0))
 						{
 							$dif1=$pMes-$this->getMes(0);
 							if($dif1==0)
 							{
 								if($pDia2==0)
 								{
 									if($pDia>$this->getDia(0))
 									{
 										$ban=true;
 									}	
 								}
 								else
 								{
 									if($pDia>$pDia2)
 									{
 										$ban=true;
 									}
 								}
 							}
 							else
 							{
 								if($dif1>0)
 								{
 									$ban=true;
 								}
 							}
 						}
 					}
 					else
 					{
 						if($pMes>=$pMes2)
 						{
 							$dif1=$pMes-$pMes2;
 							if($dif1==0)
 							{
 								if($pDia2==0)
 								{
 									if($pDia>$this->getDia(0))
 									{
 										$ban=true;
 									}	
 								}
 								else
 								{
 									if($pDia>$pDia2)
 									{
 										$ban=true;
 									}
 								}
 							}
 							else
 							{
 								if($dif1>0)
 								{
 									$ban=true;
 								}
 							}
 						}
 					}
 				}
 				else
 				{
 					if($dif1>0)
 					{
 						$ban=true;
 					}
 				}
 			}
 		}
 		else
 		{
 			if($pAno>=$pAno2)
 			{
 				$dif1=$pAno-$pAno2;
 				if($dif1==0)
 				{
 					if($pMes2==0)
 					{
 						if($pMes>=$this->getMes(0))
 						{
 							$dif1=$pMes-$this->getMes(0);
 							if($dif1==0)
 							{
 								if($pDia2==0)
 								{
 									if($pDia>$this->getDia(0))
 									{
 										$ban=true;
 									}	
 								}
 								else
 								{
 									if($pDia>$pDia2)
 									{
 										$ban=true;
 									}
 								}
 							}
 							else
 							{
 								if($dif1>0)
 								{
 									$ban=true;
 								}
 							}
 						}
 					}
 					else
 					{
 						if($pMes>=$pMes2)
 						{
 							$dif1=$pMes-$pMes2;
 							if($dif1==0)
 							{
 								if($pDia2==0)
 								{
 									if($pDia>$this->getDia(0))
 									{
 										$ban=true;
 									}	
 								}
 								else
 								{
 									if($pDia>$pDia2)
 									{
 										$ban=true;
 									}
 								}
 							}
 							else
 							{
 								if($dif1>0)
 								{
 									$ban=true;
 								}
 							}
 						}
 					}
 				}	
 				else
 				{
 					if($dif1>0)
 					{
 						$ban=true;
 					}
 				}
 			}
 		}
 		return $ban;
 	}

	/** Compara fechas, estas pueden ser dos o solamente una comparandola con la fecha actual
 	 *
 	 * @param integer $pDia Dia de la primer fecha
 	 * @param integer $pMes Mes de la primer fecha
 	 * @param integer $pAno Ano de la primer fecha
 	 *
 	 * @param integer $pDia2 Dia de la segunda fecha
 	 * @param integer $pMes2 Mes de la segunda fecha
 	 * @param integer $pAno2 Ano de la segunda fecha
 	 *
 	 * @return boolean $ban	Resultado de la comparacion; true o false
 	 */
 	function compareDateEquals($pDia=0,$pMes=0,$pAno=0,$pDia2=0,$pMes2=0,$pAno2=0)
 	{
 		$ban=false;
 		if($pDia2==0 || $pMes2==0 || $pAno2==0)
 		{
 			if($pAno==$this->getAno4Digits(0))
 			{
 				if($pMes==$this->getMes(0))
 				{
 					if($pDia==$this->getDia(0))
 					{
 						$ban=true;
 					}
 				}
 			}
 		}
 		else
 		{
 			if($pAno==$pAno2)
 			{
 				if($pMes==$pMes2)
 				{
 					if($pDia==$pDia2)
 					{
 						$ban=true;
 					}
 				}
 			}
 		}
 		return $ban;
 	}


 	/** Regresa el dia de la semana, siendo 0 el domingo y  el sabado 6, respecto al numero de dias adelante
	 * @param integer $pDia Numero de dias que se quieren adelante
	 */
 	function getDiaSemanaNum($pDia=0)
 	{
 		return date("w",time()+($pDia*24*60*60));
 	}

 	/** Regresa el dia de la semana,de Domingo a Lunes
	 * @param integer $pDia Numero de dias que se quieren adelante
	 */
 	function getDiaSemanaLetra($pDia=0)
 	{
		$internal=date("w",time()+($pDia*24*60*60));
		switch($internal)
		{
			case 0:
				$internal='Domingo';
				break;
			case 1:
				$internal='Lunes';
				break;
			case 2:
				$internal='Martes';
				break;
			case 3:
				$internal='Miercoles';
				break;
			case 4:
				$internal='Jueves';
				break;
			case 5:
				$internal='Viernes';
				break;
			case 6:
				$internal='Sabado';
				break;
		}
		return $internal;
 	}

 	/** Regresa el mes del ano,Enero a Diciembre
	 * @param integer $pDia Numero de dias que se quieren adelante
	 */
 	function getMesLetra($pDia=0)
 	{
		$internal=date("m",time()+($pDia*24*60*60));
		switch($internal)
		{
			case 1:
				$internal='Enero';
				break;
			case 2:
				$internal='Febrero';
				break;
			case 3:
				$internal='Marzo';
				break;
			case 4:
				$internal='Abril';
				break;
			case 5:
				$internal='Mayo';
				break;
			case 6:
				$internal='Junio';
				break;
			case 7:
				$internal='Julio';
				break;
			case 8:
				$internal='Agosto';
				break;
			case 9:
				$internal='Septiembre';
				break;
			case 10:
				$internal='Octubre';
				break;
			case 11:
				$internal='Noviembre';
				break;
			case 12:
				$internal='Diciembre';
				break;
		}
		return $internal;
 	}

 	/** Regresa la fecha de hoy,respecto al numero de dias adelante; p.e: Jueves 18, Diciembre, 2008
 	 * @param integer $pDia Dias hacia adelante
 	 */
 	function getDiaHoy($pDia=0)
 	{
 		return $this->getDiaSemanaLetra($pDia).' '.$this->getDia($pDia).', '.$this->getMesLetra($pDia).', 20'.$this->getAno($pDia);
 	}

 	/**Regresa el dia de la semana en forma abreviada, Lue a Dom
 	 * @param integer $pDia Dias hacia adelante
 	 */
 	function getDiaSemanaLetraAbreviado($pDia=0)
 	{
 		$internal=date("w",time()+($pDia*24*60*60));
		switch($internal)
		{
			case 0:
				$internal='Dom';
				break;
			case 1:
				$internal='Lun';
				break;
			case 2:
				$internal='Mar';
				break;
			case 3:
				$internal='Mie';
				break;
			case 4:
				$internal='Jue';
				break;
			case 5:
				$internal='Vie';
				break;
			case 6:
				$internal='Sab';
				break;
		}
		return $internal;
 	}

 	/**Regresa un arreglo bidimensional de los dias habiles de la semana.
 	 * Ejemplo de los datos que regresaria
 	 *  [x][0] - Lun
 	 * 	[x][1] - 12
 	 * 	[x][2] - Lunes
 	 * 	[x][3] - Enero
 	 * 	[x][4] - 01
 	 * 	[x][5] - 2009
 	 * @param integer $pSemana Numero de semanas adelantes o atras para obtener los dias abiles de esa semana
 	 */
 	function getDiasHabiles($pSemana=0)
 	{
 		$internal=$this->getDiaSemanaNum();
 		$internal2=$pSemana*7;
 		if($internal==0)
 		{
 			for($i=0;$i<=5;$i++)
 			{
 				$arr[$i][0]=$this->getDiaSemanaLetraAbreviado($i+1+$internal2);
 				$arr[$i][1]=$this->getDia($i+1+$internal2);
 				$arr[$i][2]=$this->getDiaSemanaLetra($i+1+$internal2);
 				$arr[$i][3]=$this->getMesLetra($i+1+$internal2);
 				$arr[$i][4]=$this->getMes($i+1+$internal2);
 				$arr[$i][5]=$this->getAno4Digits($i+1+$internal2);
 			}
 		}
 		if($internal==1)
 		{
 			for($i=0;$i<=5;$i++)
 			{
 				$arr[$i][0]=$this->getDiaSemanaLetraAbreviado($i+$internal2);
 				$arr[$i][1]=$this->getDia($i+$internal2);
 				$arr[$i][2]=$this->getDiaSemanaLetra($i+$internal2);
 				$arr[$i][3]=$this->getMesLetra($i+$internal2);
 				$arr[$i][4]=$this->getMes($i+$internal2);
 				$arr[$i][5]=$this->getAno4Digits($i+$internal2);
 			}
 		}
 		if($internal==2)
 		{
 			for($i=-1;$i<5;$i++)
 			{
 				$arr[$i+1][0]=$this->getDiaSemanaLetraAbreviado($i+$internal2);
 				$arr[$i+1][1]=$this->getDia($i+$internal2);
 				$arr[$i+1][2]=$this->getDiaSemanaLetra($i+$internal2);
 				$arr[$i+1][3]=$this->getMesLetra($i+$internal2);
 				$arr[$i+1][4]=$this->getMes($i+$internal2);
 				$arr[$i+1][5]=$this->getAno4Digits($i+$internal2);
 			}
 		}
 		if($internal==3)
 		{
 			for($i=-2;$i<4;$i++)
 			{
 				$arr[$i+2][0]=$this->getDiaSemanaLetraAbreviado($i+$internal2);
 				$arr[$i+2][1]=$this->getDia($i+$internal2);
 				$arr[$i+2][2]=$this->getDiaSemanaLetra($i+$internal2);
 				$arr[$i+2][3]=$this->getMesLetra($i+$internal2);
 				$arr[$i+2][4]=$this->getMes($i+$internal2);
 				$arr[$i+2][5]=$this->getAno4Digits($i+$internal2);
 			}
 		}
 		if($internal==4)
 		{
 			for($i=-3;$i<3;$i++)
 			{
 				$arr[$i+3][0]=$this->getDiaSemanaLetraAbreviado($i+$internal2);
 				$arr[$i+3][1]=$this->getDia($i+$internal2);
 				$arr[$i+3][2]=$this->getDiaSemanaLetra($i+$internal2);
 				$arr[$i+3][3]=$this->getMesLetra($i+$internal2);
 				$arr[$i+3][4]=$this->getMes($i+$internal2);
 				$arr[$i+3][5]=$this->getAno4Digits($i+$internal2);
 			}
 		}
 		if($internal==5)
 		{
 			for($i=-4;$i<2;$i++)
 			{
 				$arr[$i+4][0]=$this->getDiaSemanaLetraAbreviado($i+$internal2);
 				$arr[$i+4][1]=$this->getDia($i+$internal2);
 				$arr[$i+4][2]=$this->getDiaSemanaLetra($i+$internal2);
 				$arr[$i+4][3]=$this->getMesLetra($i+$internal2);
 				$arr[$i+4][4]=$this->getMes($i+$internal2);
 				$arr[$i+4][5]=$this->getAno4Digits($i+$internal2);
 			}
 		}
 		if($internal==6)
 		{
 			for($i=-5;$i<1;$i++)
 			{
 				$arr[$i+5][0]=$this->getDiaSemanaLetraAbreviado($i+$internal2);
 				$arr[$i+5][1]=$this->getDia($i+$internal2);
 				$arr[$i+5][2]=$this->getDiaSemanaLetra($i+$internal2);
 				$arr[$i+5][3]=$this->getMesLetra($i+$internal2);
 				$arr[$i+5][4]=$this->getMes($i+$internal2);
 				$arr[$i+5][5]=$this->getAno4Digits($i+$internal2);
 			}
 		}
 		return $arr;
 	}
 }
?>